<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!-- コンテナをロード -->
  <script type="text/javascript" src="../src/container.js" ></script>
</head>
<body>
  <div id="stdout"></div>
  <script type="text/javascript">
var stdout = document.getElementById( "stdout" );

// テスト用のクラス。
function Kitten( ) {
  this.name = name;
}
Kitten.prototype = {
  getName: function() { return this.name; },
  setName: function(name) { this.name = name; }
}

var c = new container.Container( function( binder ) {
  // コンポーネントを登録
  binder.bind( Kitten ).to("mii").inject( { name: "mii" } );
  binder.bind( Kitten ).to("shiro").inject( { name: "shiro" } );

  // バインドメソッドを登録
  binder.bindMethod( "mii", "getName" ).to( "get" );
  binder.bindMethod( "mii", "setName" ).to( "set" );

  // "getName"を持つすべてのコンポーネントの"getName"メソッドを"gets"に登録する。
  binder.bindMethods( container.types.has("getName"), "getName" ).to( "gets" );
});

// コンポーネントの取得
var mii = c.get("mii");
stdout.innerHTML += mii.getName() + "</br>"; // mii

// バインドメソッドの取得と実行。
var get = c.get("get");
var set = c.get("set");
stdout.innerHTML += get() + "</br>"; // mii

set("tora");　// 引数も使える。
stdout.innerHTML += get() + "</br>"; // tora

// コンポーネント mii のAPIが呼び出されているので、miiの名前が更新されている
stdout.innerHTML += mii.getName() + "</br>"; // tora

stdout.innerHTML += "---</br>";

// binder.bindMethodsで登録されたメソッドを取得。配列で返される。
var list = c.get("gets");
for ( var i=0; i<list.length;i++ ) {
    stdout.innerHTML += list[i]() + "</br>";
}

  </script>
</body>
</html>